﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SushiSOAPServices.Dominio;
using System.Data.SqlClient;

namespace SushiSOAPServices.Persistencia
{
    public class AtencionPedidosDAO
    {
        public List<PedidoAtendido> obtenerPedidosPorAtender() 
        {
            List<PedidoAtendido> pedidosEncontrados = new List<PedidoAtendido>();
            PedidoAtendido pedidoEncontrado = null;
            string sql = "select per.idpersona as personaid, per.nombres as nombre, per.apellidos as apellidos, ped.idpedido as pedidoid, ped.estado as estado, pa.idpago as pagoid, per.direccion as direccion, per.telefono as telefono from Persona as per, Pedido as ped,  " +
                "Pago pa where per.idpersona=ped.idcliente and pa.idpedido=ped.idpedido and ped.estado in ('PEND', 'WSEND', 'RECEP')";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            pedidoEncontrado = new PedidoAtendido()
                            {
                                idpedido = (int)resultado["pedidoid"],
                                idcliente = (int)resultado["personaid"],
                                idpago = (int)resultado["pagoid"],
                                nombreCliente = (string)resultado["nombre"],
                                direccion = (string)resultado["direccion"],
                                telefono = (string)resultado["telefono"],
                                apellidos = (string)resultado["apellidos"],
                                estado = (string)resultado["estado"]
                            };
                            pedidosEncontrados.Add(pedidoEncontrado);
                        }
                    }
                }
            }
            return pedidosEncontrados;
        }


        public List<DetallePedido> ObtenerDetalle(int idPedido)
        {
            List<DetallePedido> detallepedidosEncontrados = new List<DetallePedido>();
            DetallePedido detallepedidoEncontrado = null;
            string sql = "select * from Detalle_Pedido where idPedido=@ped";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@ped", idPedido));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            detallepedidoEncontrado = new DetallePedido()
                            {
                                IdPedido = (int)resultado["idpedido"],
                                IdDetallePedido = (int)resultado["idDetallePedido"],
                                IdProducto = (int)resultado["idProducto"],
                                Cant = (int)resultado["cant"],
                                Monto = (double)resultado["monto"]
                            };
                            detallepedidosEncontrados.Add(detallepedidoEncontrado);
                        }
                    }
                }
            }
            return detallepedidosEncontrados;
        }

        public String asignarTrabajador(int idPedido, int idPersona)
        {
            Pedido pedidoObtenido = new Pedido();
            string sql = "UPDATE pedido SET idEmpleado=@per WHERE idPedido=@ped";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@per", idPersona));
                    com.Parameters.Add(new SqlParameter("@ped", idPedido));
                    com.ExecuteNonQuery();
                }
            }

            pedidoObtenido = ObtenerPorEmpleado(idPedido, idPersona);

            if (pedidoObtenido != null)
            {
                return "exito";
            }
            else
            {
                return "fracaso";
            }
        }

        public String cambiarEstadoPedido(int idPedido, string estado)
        {
            Pedido pedidoObtenido = new Pedido();
            string sql = "UPDATE pedido SET Estado=@est WHERE idPedido=@ped";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@est", estado));
                    com.Parameters.Add(new SqlParameter("@ped", idPedido));
                    com.ExecuteNonQuery();
                }
            }

            pedidoObtenido = ObtenerPorEstado(idPedido, estado);

            if (pedidoObtenido != null)
            {
                return "exito";
            }
            else
            {
                return "fracaso";
            }
        }

        public int ObtenerPorEmpleadoEnEnvio(int idEmpleado)
        {
           int cant = 0;
            string sql = "SELECT count(IdEmpleado) as cantidad from pedido WHERE IdEmpleado=@emp and Estado=@est";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@emp", idEmpleado));
                    com.Parameters.Add(new SqlParameter("@est", "NENVIO"));

                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            cant = (int)resultado["cantidad"];
                        }
                    }
                }
            }
            return cant;
        }

        public Pedido ObtenerPorEmpleado(int idPedido, int idPersona)
        {
            Pedido pedidoEncontrado = null;
            string sql = "SELECT * FROM pedido WHERE idpedido=@ped and idEmpleado=@per";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@ped", idPedido));
                    com.Parameters.Add(new SqlParameter("@per", idPersona));

                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            pedidoEncontrado = new Pedido()
                            {   
                                IdPedido=(int)resultado["idPedido"],
                                IdEmpleado = (int)resultado["idEmpleado"]
                            };
                        }
                    }
                }
            }
            return pedidoEncontrado;
        }

        public Pedido ObtenerPorEstado(int idPedido, string estado)
        { 
            Pedido pedidoEncontrado = null;
            string sql = "SELECT * FROM pedido WHERE idpedido=@ped and estado=@est";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@ped", idPedido));
                    com.Parameters.Add(new SqlParameter("@est", estado));

                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            pedidoEncontrado = new Pedido()
                            {
                                IdPedido = (int)resultado["idPedido"],
                                Estado = (string)resultado["Estado"]
                            };
                        }
                    }
                }
            }
            return pedidoEncontrado;
        }

        public List<Persona> ObtenerPersona()
        {
            List<Persona> personasEncontradas = new List<Persona>();
            Persona personaEncontrada = null;
            string sql = "SELECT * FROM persona WHERE tipopersona=@tp";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@tp", "EMPDO"));

                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            personaEncontrada = new Persona()
                            {
                                IdPersona = (int)resultado["IdPersona"],
                                Nombres = (string)resultado["Nombres"],
                                Apellidos = (string)resultado["Apellidos"]
                            };
                            personasEncontradas.Add(personaEncontrada);
                        }
                    }
                }
            }
            return personasEncontradas;
        }
    }
}